package 网络编程通信三要素.协议;

public class Test {
    public static void main(String[] args) {
        // 通信协议
        // 网络上通信的设备, 事先规定的连接规则, 以及传输数据的规则被称为网络通信协议

        // 开放式网络互联标准: OSI网络参考模型
        // OSI网络参考模型: 全球网络互联标准
        // TCP/IP网络模型: 事实上的国际标准

        // 传输层的两个通信协议
        // UDP(User Datagram Protocol): 用户数据报协议
        // TCP(Transmission Control Protocol): 传输控制协议

        // UDP协议
        // 特点: 无连接, 不可靠通信
        // 不事先建立联系, 数据按照包发, 一包数据包含: 自己的IP, 程序端口, 目的地IP, 程序端口和数据(限制在64KB内) 等.
        // 发送方不管对方是否在线, 数据在中间丢失也不管, 如果接收方收到数据也不返回确认, 故是不可靠的
        // 但他的通信效率高

        // TCP协议
        // 特点: 面向连接, 可靠通信
        // TCP的最终目的: 要保证在不可靠的信道上实现可靠的传输
        // TCP主要由三个步骤实现可靠传输: 三次握手建立连接, 传输数据进行确认, 四次挥手断开连接
        // 他的通信效率相对不高


        // TCP协议: 三次握手建立可靠连
        // 第一次: 客户端发出连接请求到服务器;
        // 第二次: 服务器返回一个响应给客户端;
        // 第三次: 客户端再次法术确认信息, 连接建立

        // 为啥要三次握手建立连接?
        // 这三次保证了客户端和服务端都是收发消息正常(也就是这三次都进行了一次收发信息)

        // 传输数据会进行确认, 以保证数据传输的可靠性


        // TCP协议: 四次握手断开连接
        // 目的: 确保双方数据的收发都已经完成!
        // 第一次: 客户端发出断开连接请求给服务端
        // 第二次: 服务端返回一个响应: 让客户端稍等(因为这时服务端可能还没有接到客户端发来的信息), 服务端将最后的数据处理完毕后, 进入第三次握手
        // 第三次: 服务端返回一个响应: 确认断开
        // 第四次: 发出正式确认断开连接
    }
}
